Sometimes a computational problem can be divided into pieces in a way that allows a system to work on more than one piece at a time. For example, concurrent computer programs simultaneously carry out multiple computing tasks, using mechanisms such as multiple threads or multiple computational processes. Parallel computing may be viewed as an example of concurrent computing, and the distinction between them is not critical here.
Parallel programs, like many other programs, are generally developed using tools such as source code editors, version control systems, documentation generators, compilers, interpreters, virtual machines, performance profilers, and/or debuggers. A debugger, in particular, is a computer program used to test and debug other programs, which are referred to as debuggee programs or simply as “debuggees”. A debugger generally provides a software developer with some control over debuggee execution, such as pausing execution to examine the debuggee's variables and other internal state information, stepping through debuggee code line-by-line, and setting a breakpoint to stop debuggee execution when a specified condition occurs within the debuggee. Some debuggers also allow a developer to modify the debuggee's internal state during debugging by setting variables, instead of merely observing the internal state.